#include <iostream>

class Test
{
public:
    Test()
    {
        std::cout << "构造函数!\n";
    }
    ~Test()
    {
        std::cout << "析构函数!\n";
    }
    void show()
    {
        std::cout << " show!\n";
    }
};

class Derived:public Test
{

};

void func()
{
    // 栈的解旋 : 在抛出异常之后，栈上的对象都会自动析构
    Test t;
    throw Derived(); // 抛出异常以后，后面的代码不再执行

    while (1);
}

int main()
{
    try
    {
        func();
    }

    //抛出的异常对象会在捕获结束之后进行释放
    //捕获异常支持向上转型
    catch (const Test &str)
    {
        std::cout << "捕获异常" << std::endl;
    }
}